package ar.com.ctrln.view.dashboard.compras.compra;

import java.math.BigDecimal;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventQueue;
import org.zkoss.zk.ui.event.EventQueues;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Decimalbox;
import org.zkoss.zul.Div;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Spinner;
import org.zkoss.zul.Window;

import ar.com.ctrln.control.compras.compra.RegistrarCompra;
import ar.com.ctrln.persistence.model.compra.DetalleCompra;
import ar.com.ctrln.persistence.model.insumo.Insumo;
import ar.com.ctrln.view.ui.comportamientoVentana.AbstractMinimizarVentana;

@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class RegistrarDetCompraController extends AbstractMinimizarVentana {

	private static final long serialVersionUID = 7293861791737040132L;

	@WireVariable
	private RegistrarCompra registrarCompra;
	
	private DetalleCompra detCompra;

	private EventQueue insumoEvent = (EventQueue) EventQueues.lookup("addInsumos",EventQueues.DESKTOP, true);

	@Wire
	private Window wRegistrarDetalleCompra;
	
	@Wire
	private Div btnRegistrarDetalleCompra;
	
	@Wire
	private Label lUMedida;
	
	@Wire
	private Combobox cboTipoInsumo;
	
	@Wire
	private Combobox cboInsumo;
	
	@Wire
	private Combobox cboFormaPago;
		
	@Wire
	private Spinner spinCantidad;
	
	@Wire
	private Decimalbox decimalExtras;
	
	@Wire
	private Decimalbox decimalSubtotal;
	
		
	@SuppressWarnings({ })
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
	}
			
	@SuppressWarnings("unchecked")
	@Listen("onClick = #btnRegistrarDetalleCompra")
	public void registrarDetalle() {
		if(cboInsumo.getText().equals("Seleccione ...") || cboTipoInsumo.getText().equals("Seleccione ..."))
		{
			Clients.showNotification("Antes debe completar los campos faltantes",Clients.NOTIFICATION_TYPE_INFO, btnRegistrarDetalleCompra, "before_center", 6000);
	
		}
		else{
			
			detCompra = new DetalleCompra();
			detCompra.setInsumo((Insumo)cboInsumo.getModel().getElementAt(cboInsumo.getSelectedIndex()));
			detCompra.setCantidad(spinCantidad.getValue());
			detCompra.setPrecioLote(decimalExtras.getValue().doubleValue()*spinCantidad.getValue());
			detCompra.getInsumo().setPrecio(decimalExtras.getValue().doubleValue());
			insumoEvent.publish(new Event("onButtonClick", null,detCompra));
			wRegistrarDetalleCompra.onClose();
		}
		
}
	
	@Listen("onSelect = #cboTipoInsumo")
	public void seleccionInsumo() {
		cboInsumo.setText("Seleccione ...");
		String tipo = cboTipoInsumo.getText();
		cboInsumo.setModel(new ListModelList<Insumo>(registrarCompra.listaInsumosxTipo(tipo)));
	}
	
	@Listen("onSelect = #cboInsumo")
	public void asignarMedida() {
		decimalExtras.setValue(BigDecimal.valueOf(((Insumo)cboInsumo.getModel().getElementAt(cboInsumo.getSelectedIndex())).getPrecio()));
		lUMedida.setValue(String.valueOf(((Insumo)cboInsumo.getModel().getElementAt(cboInsumo.getSelectedIndex())).getUnidadMedida()));
		Clients.showNotification("Puede modificar el valor del Insumo de ser necesario",Clients.NOTIFICATION_TYPE_INFO, decimalExtras, "end_center", 6000);
		
	}
	
	@Listen("onClick = #btnCalcular")
	public void calcularSubtotal() {
		double subtotal;
		subtotal = decimalExtras.getValue().doubleValue()*spinCantidad.getValue();
		decimalSubtotal.setValue(BigDecimal.valueOf(subtotal));
	}
	
	
}

